#ifndef _INETADDR_HPP_

#define _INETADDR_HPP_

#include <string>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
//#include <>

namespace InetAddrModule
{
// 将网络序列格式化。
class InetAddr
{
    public:
        // 绑定发送时要将本地序列转换为网络序列操作。
        // 收到消息时网络序列本地序列操作。
        // 服务端是网络序列。客户端是本地序列。
        // 网络序列转主机序列(好作为账号打印出来)
        InetAddr(struct sockaddr_in& addr)
            :_addr(addr)
        {
            // 4字节网络风格的IP -> 点分十进制的字符串风格的IP
            _ip = inet_ntoa(_addr.sin_addr);
            _port = ntohs(_addr.sin_port);
        }
        ~InetAddr()
        {
            ;
        }
        std::string Ip()
        {
            return _ip;
        }
        uint16_t Port()
        {
            return _port;
        }
        const struct sockaddr_in &Addr()
        {
            return _addr;
        }
        std::string Name()
        {
            std::string ret;

            ret += (_ip + ":" + std::to_string(_port));

            return ret;
        }
        bool operator == (const InetAddr& addr)
        {
            return addr._ip == _ip && addr._port == _port;
        }
    private:
        struct sockaddr_in _addr;
        std::string _ip;
        uint16_t _port;
};
}

#endif